package com.shujia.scala

object Demo29Implicit {
  def main(args: Array[String]): Unit = {
    /**
     * 隐式转换 -- 隐式类型转换  -- 主要用于动态给对象增加系的呢方法
     * 1、隐式转换函数
     * 2、隐式转换类
     * 3、隐式转换变量
     *
     */

    //1、显示类型转换

    def fun(i: Int): Unit = {
      println(i)
    }

    fun(100)
    //显示类型转换
    //fun("1000".toInt)
    //println("=" * 100)

    /**
     * 1、隐式转换函数  -- 会自动将当前作用域中的String类型的变量隐式转换Int类型，可以将String当初Int使用
     *
     * 注意：同一个作用域中只能有一个参数类型和返回值类型一样的隐式转换x
     */
    implicit def strToInt(str: String): Int = {
      println("strToInt")
      Integer.parseInt(str)
    }

    //会自动调用隐式转换方法
    fun("200")
    //相当于
    fun(strToInt(("200")))

    //Double转换成Int的饮食转换
    implicit def doubleToInt(d: Double): Int = d.toInt

    fun(3.14)

  }

}
